import threading
import time
import random
import queue

# 用来存储每次测试的时间差
latency_diffs = []

# 定义高优先级任务
def high_priority_task(task_queue):
    for _ in range(100):  # 循环测试100次
        start_time = time.time()  # 高优先级线程开始时的时间
        # 模拟高优先级任务的工作，休眠随机时间
        time.sleep(random.uniform(0.01, 0.1))  # 模拟高优先级任务执行的延迟
        end_time = time.time()  # 高优先级任务结束时的时间
        
        # 记录任务抢占的时间差
        latency_diff = end_time - start_time
        latency_diffs.append(latency_diff)
        # 添加任务到队列，表示它已经完成
        task_queue.put('high_priority_done')

# 定义低优先级任务
def low_priority_task(task_queue):
    for _ in range(100):  # 循环测试100次
        while True:
            # 模拟低优先级线程忙等待的负载
            if not task_queue.empty():
                task = task_queue.get()
                if task == 'high_priority_done':
                    break  # 高优先级任务完成时退出循环
            pass

# 创建优先级队列
task_queue = queue.Queue()

# 创建高优先级线程和低优先级线程
high_thread = threading.Thread(target=high_priority_task, args=(task_queue,), daemon=True)
low_thread = threading.Thread(target=low_priority_task, args=(task_queue,), daemon=True)

# 启动线程
low_thread.start()
high_thread.start()

# 等待测试完成
high_thread.join()
low_thread.join()

# 计算最大任务抢占延迟
max_latency = max(latency_diffs) if latency_diffs else None

print(f"最大任务抢占延迟: {max_latency} 秒")

